package com.itheima.factory;

import java.io.IOException;
import java.io.InputStream;
import java.util.*;

/**
 * 要做的事：
 * 1 加载bean.properties属性文件
 * 2 读取配置文件内容
 * 3 反射创建XxxServiceImpl对象
 * 4 存储在map集合中
 */
public  class BeanFactory {
    //定义存储service对象的map集合
    public static final Map<String,Object> cache = new HashMap<>();

    static {
        //1.1 创建properties对象
        Properties properties = new Properties();
        //1 加载bean.properties属性文件
        InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");

        //1.2 加载配置文件
        try {
            properties.load(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //1.3 获取所有的key并遍历
        Set<String> keys = properties.stringPropertyNames();
        for (String key : keys) {
            //2 读取配置文件内容
            String pathName = properties.getProperty(key);
            //3 反射创建XxxServiceImpl对象
            Object bean = null;
            try {
                bean = Class.forName(pathName).newInstance();
            } catch (Exception e) {
                e.printStackTrace();
            }
            //4 存储在map集合中
            cache.put(key,bean);
        }
    }


    //定义方法，通过该方法获取service对象
    public static<T> T getService (String pathName,Class<T> T){
            return (T)cache.get(pathName);
    }
}
